Vamos estimar, a partir de uma amostra de opiniões, os intervalos de valores que delineam as avaliações de filmes do site GroupLens.
movies = read_csv("../dados/movies.csv")
ratings = read_csv("../dados/ratings.csv")
genres = read_csv("../dados/movie-genre.csv")
genres = genres %>%
group_by(movieId, title) %>%
summarise(nGenre = n())
O suscesso dos filmes de Resident Evil já não é mais nenhuma novidade. Isso fica cada vez mais evidente pelo simples motivo de observar o empenho e a motivação dos diretores em inovarem e lançarem novos filmes desde o seu aparecimento no mundo dos jogos.
re_movies = movies %>%
filter(grepl("Resident Evil", title))
dados = merge(re_movies, ratings, by="movieId")
dados = merge(dados, genres, by=c("movieId","title")) %>%
subset(select = -c(userId, timestamp, genres))
dados = dados %>%
mutate(title = replace(title,
which(title == "Resident Evil: Apocalypse (2004)"),
"Apocalypse (2004)")) %>%
mutate(title = replace(title,
which(title == "Resident Evil: Extinction (2007)"),
"Extinction (2007)")) %>%
mutate(title = replace(title,
which(title == "Resident Evil: Afterlife (2010)"),
"Afterlife (2010)")) %>%
mutate(title = replace(title,
which(title == "Resident Evil: Retribution (2012)"),
"Retribution (2012)"))
Curiosamente o conjunto de dados não contém muitas avaliações para alguns filmes de Resident Evil. Por exemplo, os filmes Afterlife (2010) e Retribution (2012) são os que contém menos avaliações. Vejamos o gráfico abaixo.
ggplotly(dados %>%
ggplot(aes(x = title, y = rating, color = title)) +
geom_jitter(width = .1) +
ggtitle("Distribuição da avaliação dos filmes") +
ylab("Avaliação") +
xlab("Filme") +
theme(legend.position="none",
plot.title = element_text(hjust = 0.5)))
Podemos ainda observar valores estranhos, curiosamente, Apocalypse possui a pior e também a maior avaliação de todos os episódios. Utilizar a média como estimativa de comparação entre os episódios não seria prudente e até mesmo injusto porque a mesma estaria sendo inlfuenciada por esses valores discrepantes.
Um ponto importante é que: como iremos utilizar o conceito de intervalos de confiança para estimar a avaliação de um filme então é importante que o filme possua um conjunto significativo de avaliações. Por este motivo, os únicos filmes submetidos a análise serão: Apocalypse (2004), Extinction (2007) e Resident Evil (2002).
dados = dados %>%
filter(!(title %in% c("Afterlife (2010)",
"Retribution (2012)")))
Antes de mais nada precisamos escolher a métrica de comparação, a métrica de comparação adotada será a mediana de avaliação por não ser afetada ou enviesada por valores extremos ou outliers.
ggplotly(dados %>%
ggplot(aes(x = title, y = rating, color = title)) +
geom_jitter(width = .1) +
geom_boxplot() +
ggtitle("Distribuição da avaliação dos filmes") +
ylab("Avaliação") +
xlab("Filme") +
theme(legend.position="none",
plot.title = element_text(hjust = 0.5)))
Os gráficos acima mostram vários valores calculados a partir do conjunto de avaliações de cada filme. Os quadrados ou box’s representam a distância interquartil (representam 50% das avaliações de cada episódio). As retas que cortam cada box são os valores de avaliação mediana para cada episódio. Observando o gráfico de box-plot, fica claro que tanto Extinction quanto Resident Evil ficam empatados. Ambos os episódios possuem a mediana de avaliação igual à 3.
bootstrap.mediana.extinction = bootstrap(
(dados %>% filter(title == "Extinction (2007)"))$rating, median, R = 1000)
mediana.resident.extinction = CI.percentile(bootstrap.mediana.extinction,
probs = c(.025, .975))
bootstrap.mediana.apocalypse = bootstrap(
(dados %>% filter(title == "Apocalypse (2004)"))$rating, median, R = 1000)
mediana.resident.apocalypse = CI.percentile(bootstrap.mediana.apocalypse,
probs = c(.025, .975))
bootstrap.mediana.resident.evil = bootstrap(
(dados %>% filter(title == "Resident Evil (2002)"))$rating, median, R = 1000)
mediana.resident.evil = CI.percentile(bootstrap.mediana.resident.evil,
probs = c(.025, .975))
medianas <- data.frame(
rbind(
c("Resident Evil (2002)", mediana.resident.evil),
c("Apocalypse (2004)", mediana.resident.apocalypse),
c("Extinction (2007)", mediana.resident.extinction)
)
)
names(medianas) = c("title", "inferiorLimit", "upperLimit")
Qual seria a expectativa de mediana de avaliação para cada um dos episódios mostrados acima?
medianas %>%
ggplot( aes(x = title,
ymin = inferiorLimit,
ymax = upperLimit,
color = title)) +
geom_errorbar(width = .2) +
ggtitle("Intervalo de confiança da mediana de avaliação dos filmes") +
ylab("Mediana de avaliação") +
xlab("Filme") +
theme(legend.position="none",
plot.title = element_text(hjust = 0.5))
A expectativa de avaliação mediana pode ser observada logo acima. O episódio Resident Evil, por exemplo, pode chegar a obter tanto a mediana de avaliação 2.5 quanto 3.5. Visivelmente o episódio Apocalypse seria o único que poderia obter a maior mediana de avaliação (entre 3.5 e 4).
Observando os intervalos de confiança para a mediana de avaliação de cada um dos episódios nada podemos concluir quanto qual dos episódios será o melhor ou maior avaliado. Quanto a variação podemos concluir que o episódio que mais pode variar em termos de mediana será o filme Apocalypse (2004).
Será que existente relacionamento entre a quantidade de gêneros que cada filme possui e sua avaliação? Antes de mais nada foi necessário transformar os dados cedidos pelo site para um formato diferente. Uma nova tabela contém os filmes separados por um único gênero. Isso irá facilitar a contagem e associação da quantidade de gênero a cada filme.
Curiosamente o conjunto de dados não contém muitas avaliações para certas quantidades de gêneros.
dados2 = merge(genres, ratings, by="movieId") %>%
subset(select = -c(userId, timestamp))
ggplotly(dados2 %>%
ggplot(aes(x=nGenre,
y=rating,
color=as.character(nGenre))) +
geom_point() +
scale_x_continuous(breaks = seq(1,10,1)) +
ggtitle("Distribuição da quantidade de gêneros dos filmes") +
ylab("Avaliação") +
xlab("Quantidade de gêneros") +
theme(legend.position="none",
plot.title = element_text(hjust = 0.5)))
Apesar de existirem filmes associados a 8 e a 10 gêneros cinematográficos, há poucas avaliações para estes filmes (1 avaliação) e portanto estes dados serão filtrados porque eles não são interessantes para serem aplicados aos intervalos de confiança.
Uma outra coisa importante a ser observada é que visualmente a distribuição das avaliações de cada quantidade de gênero não apresenta a existência de relacionamento entre as variáveis.
bootf <- function(x) {
b = bootstrap(x$rating, median, R = 1000)
m = CI.percentile(b, probs = c(.025, .975))
newstuff = rbind(m) %>%
data.frame()
return(newstuff)
}
dados3 = dados2 %>%
filter(nGenre <= 7) %>%
group_by(nGenre) %>%
do(bootf(.)) %>%
setNames(c("nGenre","rating_lwr","rating_upr"))
Antes de mais nada precisamos escolher a métrica de comparação, a métrica de comparação adotada será a mediana de avaliação por não ser afetada ou enviesada por valores extremos ou outliers. Os intervalos de confiança foram calculados para a mediana de avaliação de cada quantidade de gêneros de um filme.
dados3 %>%
ggplot(aes(x = nGenre,
ymin = rating_lwr,
ymax = rating_upr,
color=as.character(nGenre))) +
geom_errorbar(width = .1) +
scale_x_continuous(breaks = seq(1,7,1)) +
labs(x="Quantidade de gêneros", y="Mediana de avaliação") +
ggtitle("Intervalo de confiança da mediana de avaliação de cada quantidade de gêneros")+
theme(legend.position="none",
plot.title = element_text(hjust = 0.5))
A expectativa de avaliação para cada quantidade pode ser observada logo acima. Os filmes com quantidade de gêneros igual a 4 e 5, por exemplo, podem chegar a obter a mediana de avaliação entre 3.5 e 4, enquanto os filmes com quantidade 1, 2, 3, 6 e 7 podem atingir a mediana de avaliação mais alta (igual a 4).
Observando os intervalos de confiança para a mediana de avaliação de cada quantidade de gênero nada podemos concluir quanto qual delas será a melhor ou maior avaliada, evidentemente, não podemos observar a existência de uma relação de quanto maior a quantidade de gênero melhor a avaliação.
Quanto a variação podemos concluir que os filmes com 4 e 5 gêneros cinematográficos mais pode variar em termos de mediana de avaliação.
Copyright © 2017 Marcos Nascimento